package org.example.test;

import org.example.sword2offer.primary.Q88_ListNodePlusOne;

/**
 * @author: lynn
 * @Descript:
 * @date: 2022/2/15 23:21
 * @version: 1.0
 */
public class ListNodePlusOne {

    public static void main(String[] args) {
        ListNode node=new ListNode<Integer>(9);
        node.next =new ListNode(9);
        node.next.next=new ListNode(9);
        ListNode result=plusOne(node,1);
        System.out.println("xxxxxx");

    }
    private  static  class  ListNode<K>{
        K val;
        ListNode next;
        ListNode(K val){
            this.val=val;
        }
    }


    public static ListNode<Integer> plusOne(ListNode listNode,int val){
        ListNode<Integer> reverseNode=reverseNode(listNode);
        int incoming=0;
        boolean first=true;
        ListNode<Integer> head=reverseNode;
        while (reverseNode!=null){
            if (first){
                int temp=reverseNode.val+1+incoming;
                if (temp<10){
                    reverseNode.val=temp;
                    incoming=0;
                }else {
                    reverseNode.val=temp%10;
                    incoming=temp/10;
                }
                first=false;
            }else {
                int temp=reverseNode.val+incoming;
                if (temp<10){
                    reverseNode.val=temp;
                    incoming=0;
                }else {
                    reverseNode.val=temp%10;
                    incoming=temp/10;
                    if (reverseNode.next==null && incoming >0 ){
                        reverseNode.next=new ListNode(1);
                        //fixme
                        break;
                    }
                }
            }
            reverseNode=reverseNode.next;
        }
        return reverseNode(head);
    };

   /* private static ListNode reverseNode(ListNode listNode){
        ListNode preNode=null;
        ListNode curNode=listNode;
        while (curNode!=null){

            ListNode nextNode=listNode.next;
            curNode.next=preNode;
            preNode=curNode;
            curNode=nextNode;
        }
        return preNode;
    }*/

    public static ListNode reverseNode(ListNode listNode){
        ListNode curNode=listNode;
        ListNode preNode=null;
        while(curNode!=null){
            ListNode nextNode=curNode.next;
            curNode.next=preNode;
            preNode=curNode;
            curNode=nextNode;
        }
        return preNode;
    }

    /**
     *  ListNode preNode =null;
     *         ListNode curNode=head;
     *         while (curNode!=null){
     *             ListNode nextNode=curNode.next;
     *             curNode.next=preNode;
     *             preNode=curNode;
     *             curNode=nextNode;
     *         }
     */
}
